package com.liunian.duplication2.nums.binarysearch;

import java.util.Arrays;

public class SearchRange34 {

	/**
	 给你一个按照非递减顺序排列的整数数组 nums，和一个目标值 target。
	 请你找出给定目标值在数组中的开始位置和结束位置。
	 如果数组中不存在目标值 target，返回 [-1, -1]。
	 你必须设计并实现时间复杂度为 O(log n) 的算法解决此问题。

	 示例 1：
	 输入：nums = [5,7,7,8,8,10], target = 8
	 输出：[3,4]

	 示例 2：
	 输入：nums = [5,7,7,8,8,10], target = 6
	 输出：[-1,-1]

	 示例 3：
	 输入：nums = [], target = 0
	 输出：[-1,-1]
	 */
	public int[] searchRange(int[] nums, int target) {
		int left = 0;
		int right = nums.length - 1;
		int l = 0;
		int r = nums.length - 1;
		while (left <= right) {
			int mid = (left + right) / 2;
			if (nums[mid] < target) {
				left = mid + 1;
			} else if (nums[mid] > target) {
				right = mid - 1;
			} else {
				int temp = mid;
				while (mid >= 0 && nums[mid] == target) {
					mid--;
				}
				l = mid + 1;
				while (temp <= nums.length - 1 && nums[temp] == target) {
					temp++;
				}
				r = temp - 1;
				return new int[] {l, r};
			}
		}
		return new int[] {-1, -1};
	}

	public static void main(String[] args) {
		SearchRange34 searchRange34 = new SearchRange34();
		System.out.println(Arrays.toString(searchRange34.searchRange(new int[]{6}, 6)));
	}

}
